Log In  
BBS > Lexaloffle Community Superblog
This is a combined feed of all Lexaloffle user blogs. For Lexaloffle-related news, see @zep's blog.

All | Following | PICO-8 | Voxatron | General | Off-site
[ :: Read More :: ]

Cart #mod3_v01-0 | 2019-01-02 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

beta testing build of Mountains of Demise 3, mostly for personal usage so I can redownload it on my laptop in SPLORE because there's absolutely nothing of interest here

P#60499 2019-01-02 15:27
[ :: Read More :: ]

Cart #slicednoise-0 | 2019-01-02 | Code ▽ | Embed ▽ | No License
1

Description

Old project that I decided finishing: It slices the screen (vertically and horizontally) as many times as requested. The slices then recursively slice, with some randomness to their dimensions.

Additionally, graphics mode can be changed. Hold the regeneration button for some trippiness.

And hey, if you like it, check out more trippy stuff on twitter :)

Controls

z,x: regenerate
up,down: change screen mode
left,right: change amount of slices (1 to 6)

P#60497 2019-01-02 09:51
[ :: Read More :: ]

Cart #yupewyoke-2 | 2019-01-04 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

Turbotron is unique among tron games because it has acceleration which makes the classic tron game so much more fun and also more like the light bikes in the original movie. It's a work in progress but please give feedback and enjoy!!

Regards,

James Lee
www.leetwins.online

UPDATE [4th Jan 2019]
-updated minor errors
-reactivated acceleration in single player mode

NEXT UPDATE [soon-ish]
-will clean up code which should fix some current glitches
-will improve A.I. in single player mode to be more 'intelligent' and challenging
-possibly other improvements from users feedback

P#60493 2019-01-02 06:08 ( Edited 2019-01-06 20:44)
[ :: Read More :: ]

Latest version :
Round of polish to make the game more look and sound better as well as some tweaks to make it a little cooler :D

  • More audio
  • Nicer visuals
  • Tweaked audio
  • Keep playing as the ship between levels
  • Asteroids persist between levels and deaths
    Cart #rikusasteroidmus_v2-0 | 2019-01-15 | Code ▽ | Embed ▽ | No License
    2

This is a thing I started a LOOOOOOOOONG time ago. About 2 years. I was really pleased with where I got too but unsure how to add that final level of polish to really finish it.

My plan now is to iterate. Tweak and get this done!!!

Cart #rikusasteroidmus-0 | 2019-01-01 | Code ▽ | Embed ▽ | No License
2

P#60486 2019-01-01 19:36 ( Edited 2019-01-15 20:46)
[ :: Read More :: ]

Cart #fillpatanm1-0 | 2019-01-01 | Code ▽ | Embed ▽ | No License
1

the full color "fillp + rectfill" drawing.

about fill pattern drawing old format follow.
URL FILLPDRAW
that's can only 2 color in cell of 4x4 size.

P#60477 2019-01-01 07:15 ( Edited 2019-01-01 10:12)
[ :: Read More :: ]

Cart #dmerakoni-0 | 2019-01-01 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

The zodiac sign of Japan in 2019 is a wild boar.

So I drew the first sunrise of the year and a wild boar and moved them.

PICO -8 users, have a great 1 year.

P#60478 2019-01-01 07:08 ( Edited 2020-04-23 04:19)
[ :: Read More :: ]

A real-time fire effect based on the PSX Doom fire described by the wonderful Fabien Sanglard. Uses interlaced rendering to speed things up dramatically. Use the arrow keys to add wind, Z to show/hide stats, and X to turn the fire on and off.

A similar Pico-8 fire was done by Ben Hickling. However, that one looks and works a little differently, and runs at a lower 32x32 resolution (though with higher performance).

I think there's probably ways to make this a fair bit faster, but I just wanted to share this with you all. I hope it keeps you warm, and Happy New Year!


P#60475 2019-01-01 05:19 ( Edited 2019-01-01 05:20)
[ :: Read More :: ]

Hello!

I have just started to dive into Pico 8 and Lua. I've been working on building a simple animator for my game and have run into some strange issues with regard to tables.

I declare a table and later add to it like this:

a = {}
a.p = {x=1, y=2, z=3}

The function count(a) then returns 0. Additionally, all(a) and foreach(a, function) will not iterate overt the table. Strangely, I am still able to access the information. For example,

print(a.p.x)

will correctly print the number 1. If I declare the table explicitly

a = {p={x=1,y=2,z=3}}

I have no issues. I also don't have issues if I use add() to insert new table values. However, I need to utilize the associative array functionality of the table and to add and remove values at runtime, so neither of these solutions is sufficient.

The best fix I have found is to use pairs() instead of all(). For some reason, pairs() works properly regardless of how I add values to the table. This solves my problem, but the fact that I have no idea why leads me to believe that I have some serious misunderstanding of how Lua tables and/or the Pico 8 tables api works. I'm curious as to whether others have encountered this issue and would appreciate some feedback as to where my misunderstanding may lie.

P#60469 2018-12-31 20:22
[ :: Read More :: ]

Cart #happynewyear2019-1 | 2019-01-01 | Code ▽ | Embed ▽ | No License
5

Cart #happynewyear2019-0 | 2018-12-31 | Code ▽ | Embed ▽ | No License
5

Happy new year to you!

P#60461 2018-12-31 13:49 ( Edited 2019-01-01 19:13)
[ :: Read More :: ]

My name is Bart (short for Bartłomiej). I am preparing an article about Polish PICO-8 developers. Normally, I would try to contact Krajzeg, Mr Kozlowski, Krystman, Darkhog and others via private messages or something along these lines, but I am not able to do it using this forum. Therefore, I allow myself to rally them via this post - I hope this is okay.

I would be very grateful if you could send me an e-mail and we can take it from there. My last name is Nagorski and e-mail address is full_first_name.last_name AT gmail.com.

Looking forward to hearing from you all!

P#60457 2018-12-31 12:29
[ :: Read More :: ]

Cart #sphere_vox-1 | 2019-01-02 | Embed ▽ | License: CC4-BY-NC-SA
3

I had to recreate my Sphere on Voxatron. I wandted to see how it'd look. I don't have a fillp routine yet, but I feel already happy with how it looks.

I didn't redo the white HUD tidbits for a specific reason : I haven't got to determine the good processes to make good HUD. The "Core status" part looks not as good as I expected.

P#60455 2018-12-31 10:31 ( Edited 2019-01-02 22:49)
[ :: Read More :: ]

Hey there. I'll be writing down a few things I'm discovering while taking a bite off the brand new Voxatron update. Scripting API was a long-awaited feature and I'm definitely excited to give a new spin to Vox.

Disclaimer

I'm writing this post while playing with the alpha 0.3.5b. Stuff I'll be writing can and may change over versions.

Script organization

As a script is a component like others, you can perfectly use them in an actor as well as an animation or an emitter. update and draw are called when an actor is updated or drawn.

A script has a basic encapsulation system. Local "top"[^1] variables are indeed locals to the script and globals are shared over scripts. Yeah, you read that perfectly. You can perfectly have "library" script pieces that are just there to hold your functions akin to a Pico8 code tab as long as the desired functions or variables are global.

Note that if the script has _draw and _update, they take precedence over Voxatron's routines, even if they're not placed in a room. I'm linking a cart that stores two script pieces, a few circle drawing routines and a script having _update and _draw. Feel free to download it to see how it goes. As you can see, the room is totally blank and isn't actually rendered at all.

Cart #doyumogeka-0 | 2018-12-31 | Embed ▽ | License: CC4-BY-NC-SA
5

I don't know if there are "rules" for loading or executing or ordering the scripts pieces yet, but it looks quite promising. You can have behavior code for an actor, an advanced particle emitter to add tidbits to a creature or even take over voxatron's rules temporarily to implement some logic over it (for instance a battle engine to intrrupt your RPG players with some slimes? :D )

Colors

Colors are actually spaced over the [0-255] range sparsely. I'm linking a demo so you see them. Press up or down to change the bottom layer to see which colors are transparent. The 0-15 colors are the good old Pico-8 palette where the 16 and 32 color row looks like complementary colors. There are two nice gray gradients at 80-85 and 86-91.

The (interesting) transparent colors are at 160-168, 192-200 and 224-255.

Cart #sinihojoni-0 | 2018-12-31 | Embed ▽ | License: CC4-BY-NC-SA
5

Properly making global/local functions

In 0.3.5 there is a scoping issue as seen there that raises when trying to use a local function through a function set to a variable.

For instance trying to make a globally accessible class named B where one of the class (or object)' members in a script like this:

B = {}
local function new()
        return {draw = B.draw}
end
function B.new()
        return new()
end
function B.draw()
        print("Called",0,0,7)
end

will not properly find the local function new for unknown yet reasons. I suggest to create the global variable as-is and wrap the rest of the code in a do ... end block. It'll properly set the upvalues scoping and will fix the issue.

Making libraries

As there are a few quirks around how Voxatron loads code, there might be the need to make a few conventions to make easily shareable code.

  • As mentioned in the previous point, there is a current scoping issue, so the best route would be wrapping as much code in a do/end scope, if not the whole script object.
  • Currently, when exporting objects or folders, the resulting cart uses as label the BBS label of the currently loaded cartridge (the object seen in the Metadata tab). That could be a fancy way to give an identity to your library
  • An idea for organization is having a README script only to contain your licence. You can do comment blocks by wrapping your comment in --[[ <your code> ]].
  • You can directly export folders. That can be quite useful to export multiples scripts easily.

Random API bits

  • set_draw_slice also takes an additional boolean argument to determine if you want to draw the Pico8's slice on a XY plane (flat) or XZ plane (vertically in front of the player). If it's true, it'll use XZ and will draw the top 64 rows of Pico8's buffer, else (false or nil) it'll draw on a layer like before.
  • From what I tested, stat seems to work here and there. Looks like the CPU and memory usage functions seem to work. I have yet to test the rest

Footnotes

[^1]: I can't find a better way or word to explain, but any kind of variable that's not already in a scope like a do/end, a function, a condition, a while loop or a repeat.

P#60452 2018-12-31 10:10 ( Edited 2019-03-13 14:01)
[ :: Read More :: ]

Hey look, it's a Voxatron update!

Builds are live on lexaloffle and Humble. If you have trouble accessing your account, see this page. If you own only PICO-8, you can now update to the Voxatron + PICO-8 bundle for the difference of $5 here.

This update folds in a lot of fantasy console work, and is the first time you can see Voxatron in something similar to its final form. It has the usual trappings of a fantasy console: carts with labels (and matching .vx.png file format), a boot sequence, a SPLORE-like interface, virtual cpu limitations, and most notably, a Lua scripting API. The API is a superset of PICO-8's one and can be used to write PICO-8 style programs from scratch, or mixed with built-in engine features.

[A note for returning Voxatron users, including "Humble Voxatron Debut" customers: you can also download PICO-8 with the key that you originally purchased with. And if you don't know what PICO-8 is -- have a quick look here because it is very relevant for this update! PICO-8 started as a playground for Voxatron's scripting system, but grew into the fantasy console concept that this update is based on.]

Lua Scripting

Manual

Here's an example script to get you started. From the main menu, press escape and then select DESIGNER to start editing a new cartridge. To add a script that runs in the default room, select the "New Object" pull-down menu inside one of the Objects tabs and click "New Script". Paste the following:

function draw()
    for i=0,48,0.5 do
        local x = 64 + cos(i/16+t()/4)*40
        local y = 64 + sin(i/16+t()/4)*40
        local z = 10+i + cos(i/7+t())*3
        sphere(x,y,z, 3, 8+i%8)
    end
end

You can now jump back to the room (the button at bottom left with the arrow on it), select the new script, and then place it in the room. Hit CTRL-R to run and then ESCAPE to get back to the editor.

You can build whole games from scratch in Lua (PICO-8 style), or add scripts as actor components to customize their behaviour or appearance (see Molly in the default Players folder).

Warning: Experimental!

Future versions of Voxatron will load and run earlier carts the best they can, but you should consider scripted carts made with this update to be experimental. In particular: the virtual cpu costs, sphere(), and the palette are going to change over the next few updates.

Also, there's currently no limit on allocating Lua RAM while I sort out stability issues with forcing garbage collection when the limit is reached. But this will likely end up being 4MB or 8MB, depending on what kind of carts show up. Use stat(0) to check memory usage, and feel free to ping me if you're working on a cart that needs a lot of memory so that I can take care not to break it :) (joseph @ lexaloffle)

Limitations

There is currently no way to manually store data (like dset / dget), but this will arrive during 0.3.* updates along with directly managing the savegame states. In 0.3.5, data created in Lua is automatically stored with a savegame by walking the global table and writing values and tables that aren't prefixed with a single underscore. References to functions are also stored if they existed at boot.

There's also no binary exporter yet. Exporting stand-alone carts is planned for future updates, but I don't have an eta yet.

PICO-8 Cart Support

In one of the Objects tabs, you can import .p8 files using the "Load Item Into Folder" button, and it becomes an object you can place in the room. Because the API, palette and display dimensions are all super-sets of PICO-8's, most cartridges will run with little or no modification. You can use set_draw_slice(z) to indicate which 128x128 slice should be drawn to. By drawing layers multiple times, and using the PICO-8 camera mode (in the room properties top right), you can make thick 2D games. Here's a quick test with Celeste:

Even though Voxatron and PICO-8 now share a lot more in common, I don't expect them to compete with each other. Voxatron is much more complex, and better suited to different kinds of projects. But it is still fun to fool around with PICO-8 adaptations and view old code in a new light.

Cartridge Format

Cartridges are now called .vx.png and encode data in the low 4 bits of each RGBA channel. They are stored in a staggered order to reduce visible artifacts.

The size limits are lot more relaxed than PICO-8. It is possible to have cartridges up to 1MB compressed, which is around twice the size of the current largest carts. Carts under 256k compressed appear in the png as a single cartridge like the one below, and then extra data >256k is added underneath if needed. The empty label space at the bottom will be for Title and Author in future.

Note that Voxatron cartridges have two labels -- there's the preview screenshot that shows up in the BBS player that you can grab with F7. But also an optional (but recommended!) 60x32 image that shows up in splore that can be edited in the Metadata tab. Perhaps in future we should just let anyone jump in and draw missing labels for any cartridges.

Looking Glass Support

Voxatron now runs on the Looking Glass: a real holographic display! Each frame, the virtual Voxatron display is rendered from 64 different angles, and then weaved into special format that, when viewed on the Looking Glass, gives the appearance of a solid object floating in space. You'll notice that footage of the display often has the camera moving left and right so that you can see the parallax, but in person you can keep your head still and get perfect binocular agreement without any glasses or head tracking.

The Looking Glass is now available and comes with a Voxatron license key, along with an Application Browser that includes a special edition of the new SPLORE for easy access to your favourite carts. For more videos and information, have a look at the Looking Glass website.

I'm also working on support for the Voxon VX1, but more on that later!

Microscripting and Actor Properties

The microscripting and actor editing tools have been completely reworked to be cleaner and more consistent. Microscripting events are also more predictable. For example, there is always exactly one frame that many event conditions are true in order for scripts to react to them via a single update() call: being killed, collected or entering or exiting room. This works regardless of the order that actors are defined, spawned, or are processed.

The Manual is still a little sparse on details, but I'll be rolling out some more demo carts and documentation in January.

Here's a changelist:


v0.3.5b

Added: gif saving
Added: button states via player object: pl:button(n)
Added: set_room()
Changed: Player 1 responds to keyboard controls even when control is set to gamepad
Changed: ESC immediate exits when running a cartridge from designer
Fixed: set_world_camera was only taking effect at the end of the frame
Fixed: t() // component time (in seconds) or room time if not inside a callback
Fixed: box() not drawing and kills cpu
Fixed: resource reference sometimes fails when in string form
Fixed: STATE:EXITING microscripting event not shown correctly in menu
Fixed: Removed unused config.txt variables
Fixed: (Windows) missing DLL

v0.3.5

Added: Lua scripting
Added: PICO-8 cart support
Added: Splore // replaces BBS CARTS naviagator
Added: Custom labels (with new cart format)
Added: Boot sequence
Added: Extended palette
Added: Alpha demo carts: Hug Arena, Gallery of Curiosities
Added: New object editor with new attributes and behaviours
Added: New microscripting events and activation controller
Added: Looking Glass support
Added: Deep snow and trails
Improved: RAM usage
Improved: Rendering speed
Fixed: Collecting an item with external ammo does not apply collected quantity
Fixed: Patrolling monsters turn when blocked on sides (should only be when blocked in front)
Fixed: Crash when loading very old cartridges using a 64-bit build
Fixed: Jitter when scrolling single player even width / length
Fixed: [many bugs]

Have fun, and I hope you have a great new year!
-zep

P#60448 2018-12-31 06:00 ( Edited 2018-12-31 06:11)
[ :: Read More :: ]

Cart #turnitoff-0 | 2018-12-30 | Code ▽ | Embed ▽ | No License
1

Turn it Off! is a simple highscore game where you have to push the right buttons.

For every active button you will lose life, so push the right buttons to turn it off.
If you push enough buttons you will get an combo multiplication.
You will lose points and life whenever you push an inactive button.

How many points can you get?

This game was created with Pico-8 in few days during the holidays.

You can follow me here: @max_ritters
Credits to @RobbyDuguay for the awesome music.

P#60440 2018-12-30 15:17
[ :: Read More :: ]

Cart #fenfriends-1 | 2019-01-04 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

An adventure swamp dating game. Find and meet 12 swamp denizens, give them gifts to earn their affection, and hand them the Hidden Rose.

Controls:

Arrow Keys, Move
(Z) Kiss
(X) Open/Close Friend Register

-Kiss a friend to give them a gift!
-Find hedge clippers to cut down vines!
-Fill empty bottles with cauldrons!
-Collect Orange Potions to regain Courage!

Edit: Thanks kinor! Fix typo and updated

P#60437 2018-12-30 00:41 ( Edited 2019-01-04 02:48)
[ :: Read More :: ]

Cart #nitonekhi-0 | 2018-12-30 | Code ▽ | Embed ▽ | No License
4

I made it just to kill some of my times...

P#60436 2018-12-30 00:29 ( Edited 2018-12-30 00:32)
[ :: Read More :: ]

Cart #fractured_rogue_wip-15 | 2021-08-27 | Code ▽ | Embed ▽ | No License
23

This is a roguelite that takes place in a universe that is being fractured, you must survive 10 areas and waves of enemies to hop through portals until you reach a place that is protected!

Features include:
-destructible walls
-environmental hazards (fires, water, spider webs, pits)
-29 enemies (with varying abilities/features)
-25 items/spells
-3 basic player classes (with 2 clothing styles and 8 different pallets).

Portals will appear that will take you to the next area. Enemy portals will pop up after a while, spawning more enemies as the area becomes more fractured, forcing you to move on. Pick up potions and new skills that will help you survive and go through 10 areas.

Z - Open / Close Menu , Cancel
X - Select menu option
Arrow keys - move , Attack (when moving into enemies)

Let me know what you think!

8/27/21 update: accidentally removed the water generation, so it's re-added :D. Attack animations, require a little more xp for levels, and maybe a couple of other smaller things.
8/22/21 update: There is now a fog of war, different level generation, enemies get harder the further you get now, and other various tweaks!
7/1/21 update: Added basic movement transition (looks MUCH better now), Removed wait command
2/27/20 update: Various tweaks, added some new enemies and spells. Officially done with this cart! (at least for now)
2/23/20 update: Fixed bugs, added a few items / features. Almost ready to tie a bow on this game after polishing a tiny bit more.

P#60424 2018-12-29 15:22 ( Edited 2021-08-27 18:25)
[ :: Read More :: ]

Cart #skiordie-2 | 2019-01-05 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

Race down the mountain and get as far as you can in 30 seconds. Pick up flags to extend the time, but avoid obstacles that will bring you to a halt. Pick up and throw sticks of dynamite to get rid of trees.

P#60422 2018-12-29 09:24 ( Edited 2019-01-05 00:07)
[ :: Read More :: ]

Found a console crashing bug that makes the song editor open pattern -1. For me so far it's only displayed track 00, hasn't been able to play, and if I try to save while -1 is open, PICO-8 crashes and doesn't save.
I've repeated it a couple of times but still don't have a concrete way of getting -1. The time I remember most of what I did when it occured was when I had 6 tracks of a song (00-06, speed was 22, tracks were in channels 1,2 and 3 in the song editor), one track for the test (08, speed may have been 22 or 16, it was in channel 4), and I played the song from pattern 00 (it ends in pattern 02) twice. Once I held down a note while the song was playing to fill track 8, and the second time I held down a different note till it filled track 8. As soon as the song ended (I held down the second note till the end) the song editor opened pattern -1 which had track 00 for all its channels, all 4 of which enabled. Ctrl+S resulted in a crash and no save.

I forgot there were buttons for record and screenshot. Pics of display attached :P

P#60414 2018-12-28 16:55 ( Edited 2018-12-28 16:55)
[ :: Read More :: ]

When printing with no coordinate arguments, text is printed on the next line after the last prompt position. In addition, when the bottom of the screen is reached, all previous graphics are moved upward.

It is also possible to print multiple lines at once, and when printed at the bottom, it will also move all previous graphics from multiple lines.

However, the lines after the 1st one won't be printed correctly. The 2nd line's bottom half will be hidden, and the lines after that will be invisible.

Reproduction:

  1. Start PICO-8
  2. Enter print("1\n2\n3")
  3. Repeat until prompt reaches the bottom of the screen
  4. Repeat. From then on, "2" will be cut and "3" will be invisible.

Note:

This also applies to Lua multiline strings using [[ ]], [==[ ]==], etc. instead of "\n".

P#60412 2018-12-28 14:47
View Older Posts